// 导入Vue
import Vue from 'vue';
// 导入 Vue-router
import VueRouter from 'vue-router'
// 导入 Vuex
import store from '../store/index'
// 导包
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 导入 token 方法
import { getToken, removeToken } from '../utils/token'
import { info } from '../api/index'
// 导入 element 的弹框组件
import { Message } from 'element-ui'
// 注册一下use 
Vue.use(VueRouter)

// 导入组件 登录
import login from '../views/login/login.vue';
// 导入首页组件
import index from '@/views/index/index';
// 导入组件 嵌套路由 数据 chart
import chart from '@/views/index/chart/chart'
// 导入组件 嵌套路由 用户 user
import user from '@/views/index/user/user'
// 导入组件 嵌套路由 题库 question
import question from '@/views/index/question/question'
// 导入组件 嵌套路由 企业 enterprise
import enterprise from '@/views/index/enterprise/enterprise'
// 导入组件 嵌套路由 学科 subject
import subject from '@/views/index/subject/subject'

// 创建路由器对象
const router = new VueRouter({
  // 路由规则
  routes: [
    // 空间地址重定向
    {
      path: "/",
      redirect: "/login",
    },
    // 登录
    {
      path: "/login",
      // alias: "/",
      component: login,
      meta: {
        title: '登录页'
      }
    },
    // 首页
    {
      path: "/index",
      component: index,
      meta: {
        title: '首页'
      },
      // 嵌套路由
      children: [
        // 不需要写路径 会自动解析为 /index/chart
        {
          path: 'chart',
          component: chart
        },
        {
          path: 'user',
          component: user
        },
        {
          path: 'question',
          component: question
        },
        {
          path: 'enterprise',
          component: enterprise
        },
        {
          path: 'subject',
          component: subject
        }
      ]
    },

  ]
})
// 创建路由白名单
const whitePaths = ['/login']

// 在导航卫士开始之前 进入
router.beforeEach(async (to, form, next) => {
  // 开启进度条
  NProgress.start()
  // 判断除了login 都需要验证token真伪
  if (!whitePaths.includes(to.path)) {
    if (!getToken()) {
      // 本地没有存token
      Message.warning('登录异常 请重新登录')
      next('/login')
      return
    } else {
      // 调接口查询token 真伪
      let res = await info()
      if (res.data.code !== 200) {
        Message.warning('登录异常 请重新登录')
        removeToken()
        next('/login')
        return
      } else if (res.data.code === 200) {
        // 验证成功执行跳转
        // 处理用户信息 用户的名字
        const username = res.data.data.username
        // 用户的头像
        const userIcon = process.env.VUE_APP_URL + "/" + res.data.data.avatar
        store.commit('changeIcon', userIcon)
        store.commit('changeName', username)
        next()
      }
    }
  } else {
    next()
  }
})
// 在导航卫士结束之后 
router.afterEach((to) => {
  // 关闭进度条
  NProgress.done()
  window.document.title = to.meta.title
})
// 暴露出去
export default router